package Day_0201.JUC;

/**
 * @author zxc
 * @date 2023/02/01 15:35
 **/
public class Thread_start_run {
    public static void main(String[] args) {
        /**
         * Thread类中，start && run方法之间区别
         * ===》
         * （1）start()方法被用来启动新创建的线程，而且start()内部调用了run()方法，
         * 这和直接调用run()方法的效果不一样。
         * （2）当你调用run()方法的时候，只会是在原来的线程中调用，没有新的线程启动，start()方法才会启动新线程。
         *
         * 总结 ：
         * （1）若是直接调用start方法，即启动新线程(New Thread)，去执行run方法;
         * （2）若是直接调用run方法，即在main主线程中去执行run方法;
         */

        /**
         * 为什么wait，notify，notifyall等等方法不在Thread类中？
         * ===》
         * 1.原因是JAVA提供的锁是对象级的而不是线程级的，每个对象都有锁，通过线程获得。
         *  对比 ：
         *  （1）如果线程需要等待某些锁，那么调用对象中的wait()方法就有意义了。
         *  （2）如果wait()方法定义在Thread类中，线程正在等待的是哪个锁就不明显了。
         *
         * 2.简单的说，由于wait，notify和notifyAll都是锁级别的操作，所以把他们定义在Object类中因为锁属于对象
         *
         * ===>
         * 总结 ：Java所提供的锁是对象级别的，并不是线程级别的;（即，每个对象都有其对应的锁;线程可以获取对象锁;）
         */
    }
}
